package com.csap.framework.oauth2.server.service;

import com.csap.framework.annotation.apidoc.Description;
import com.csap.framework.oauth2.UserAttribute;
import com.csap.framework.oauth2.server.entity.UserAttributeEntity;
import com.csap.framework.oauth2.server.model.UserAttributeModel;
import com.csap.mybatisplus.extension.service.BaseCsapService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用户属性
 * </p>
 *
 * @author yangchengfu
 * @dateTime 2021-07-25 23:51:30
 */
@Description(value = "用户属性Service")
public interface UserAttributeService extends BaseCsapService<UserAttributeEntity, UserAttributeModel, String> {
    /**
     * 获取用户属性列表
     *
     * @param userId 用户ID
     * @return 用户属性
     */
    Map<String, List<String>> userAttribute(String userId);

    /**
     * 根据名称删除
     *
     * @param name   名称
     * @param userId 用户ID
     * @param openId openId
     * @return 是否删除成功
     */
    Boolean removeByName(String name, String userId, String openId);

    /**
     * 根据名称删除
     *
     * @param userId 用户ID
     * @param openId openId
     * @return 是否删除成功
     */
    default Boolean removeByUserId(String userId, String openId) {
        return lambdaUpdate().eq(UserAttributeEntity::getOpenId, openId).eq(UserAttributeEntity::getUserId, userId).remove();
    }

    /**
     * 修改或者添加用户属性
     *
     * @param userAttributeList 修改的属性
     * @param openId            openId
     * @param userId            用户ID
     * @return 是否修改成功
     */
    Boolean updateAttribute(List<UserAttribute> userAttributeList, String openId, String userId);
}
